package com.zz.nondatain.view.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;

/**
 * 自定义ViewPager容器，用于解决ViewPager2与ScrollView的滑动冲突
 * 使用requestDisallowInterceptTouchEvent方法通知父控件不要拦截触摸事件
 */
public class ViewPagerContainer extends FrameLayout {
    
    private int startX;
    private int startY;
    private boolean isHorizontalScroll = false;
    private static final int TOUCH_SLOP = 8; // 触摸滑动的最小距离
    
    public ViewPagerContainer(Context context) {
        super(context);
    }
    
    public ViewPagerContainer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public ViewPagerContainer(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // 记录手指按下的位置
                startX = (int) ev.getX();
                startY = (int) ev.getY();
                // 重置滑动方向标志
                isHorizontalScroll = false;
                // 请求父控件不要拦截触摸事件，我们需要先判断滑动方向
                getParent().requestDisallowInterceptTouchEvent(true);
                break;
                
            case MotionEvent.ACTION_MOVE:
                if (!isHorizontalScroll) {
                    // 计算手指移动的距离
                    int endX = (int) ev.getX();
                    int endY = (int) ev.getY();
                    int distanceX = Math.abs(endX - startX);
                    int distanceY = Math.abs(endY - startY);
                    
                    // 判断滑动方向
                    if (distanceX > TOUCH_SLOP || distanceY > TOUCH_SLOP) {
                        // 如果是水平滑动，通知父控件不要拦截
                        // 如果是垂直滑动，让父控件拦截
                        isHorizontalScroll = distanceX > distanceY;
                        getParent().requestDisallowInterceptTouchEvent(isHorizontalScroll);
                    }
                }
                break;
                
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                // 重置状态
                isHorizontalScroll = false;
                getParent().requestDisallowInterceptTouchEvent(false);
                break;
        }
        
        return super.dispatchTouchEvent(ev);
    }
} 